package com.ruoyi.ys7Video.controller;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.utils.Threads;
import com.ruoyi.ys7Video.domain.VideoDao;
import com.ruoyi.ys7Video.service.VideoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author LiSuxuan
 * @date 2021年 07月 10日 11:04
 */
@Api("视频控制处理类")
@Slf4j
@RestController
@RequestMapping("/videoControl")
public class RotateController extends BaseController {

    @Autowired
    private VideoService videoService;

    /**
     * 存储文件的路径
     */
    @Value("${ys7.ys7ControlStart}")
    private String ys7ControlStart;

    @Value("${ys7.ys7ControlStop}")
    private String ys7ControlStop;

    /**
     * 云台控制开始转动
     *
     * @param deviceSerial 设备序列号
     * @param direction    方向 操作命令：0-上，1-下，2-左，3-右，4-左上，5-左下，6-右上，7-右下，8-放大，9-缩小，10-近焦距，11-远焦距
     * @param speed        速度 云台速度：0-慢，1-适中，2-快，海康设备参数不可为0
     * @return 消息提示
     */
    @PostMapping("/start")
    @ApiOperation("云台开始转动，direction 方向 操作命令：0-上，1-下，2-左，3-右，4-左上，5-左下，6-右上，7-右下，8-放大，9-缩小，10-近焦距，11-远焦距\r\n" +
            "speed 速度 云台速度：0-慢，1-适中，2-快，海康设备参数不可为0\r\n" +
            "例如：http://localhost:8080/videoControl/start?deviceSerial=F94404261&direction=2&speed=1")
    public String startRotate(String deviceSerial, int direction, int speed) {
        VideoDao videoLast = videoService.selectVideoLast();
        String result = null;
        /* 拼接获取token的URL */
        String getStartUrl = ys7ControlStart + "?accessToken=" + videoLast.getAccessToken() + "&deviceSerial=" + deviceSerial + "&channelNo=1&direction=" + direction + "&speed=" + speed;
        try {
            ResponseEntity<String> responseEntity = Threads.postRequest(getStartUrl);
            result = responseEntity.getBody();
            /* 拿到data数据 */
            log.info(responseEntity.getBody());
        } catch (Exception e) {
            log.info(e.getMessage());
        }
        if (result != null){
            result = result.replace("\"code\":\"", "\"code\":").replace("\"}", "}");
        }
        return result;
    }

    @PostMapping("/stop")
    @ApiOperation("设备停止接口：每次调用转动设备接口之后，必须先调用停止接口才能继续操作，即开始云台控制之后必须先调用停止云台控制接口才能进行其他操作，包括其他方向的云台转动，例如：http://localhost:8080/videoControl/stop?deviceSerial=F94404261")
    public String stopRotate(String deviceSerial) {
        VideoDao videoLast = videoService.selectVideoLast();
        String result = null;
        /* 拼接获取token的URL */
        String getStopUrl = ys7ControlStop + "?accessToken=" + videoLast.getAccessToken() + "&deviceSerial=" + deviceSerial + "&channelNo=1";
        try {
            ResponseEntity<String> responseEntity = Threads.postRequest(getStopUrl);
            result = responseEntity.getBody();
            /* 拿到data数据 */
            log.info(responseEntity.getBody());
        } catch (Exception e) {
            log.info(e.getMessage());
        }
        if (result != null){
            result = result.replace("\"code\":\"", "\"code\":").replace("\"}", "}");
        }
        return result;
    }
}
